// sm3.c: SM3 哈希实现并在 Linux 下运行  
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
#include <stdint.h>  
#include <string.h>  
#include <stdlib.h>  
#include "sm3.h"

// 主函数  
int main(void) {
    FILE* file = fopen("num.txt", "rb");
    if (file == NULL) {
        fprintf(stderr, "Error opening file 'num.txt'.\n");
        return 1;
    }

    // 获取文件大小  
    fseek(file, 0, SEEK_END);
    long filesize = ftell(file);
    fseek(file, 0, SEEK_SET);

    // 分配内存来存储文件内容  
    uint8_t* file_content = (uint8_t*)malloc(filesize);
    if (file_content == NULL) {
        fprintf(stderr, "Memory allocation failed.\n");
        fclose(file);
        return 1;
    }

    // 读取文件内容  
    fread(file_content, 1, filesize, file);
    fclose(file);

    // 准备用于哈希计算的缓冲区（去除文件末尾的换行符，如果有的话）  
    size_t ml = filesize;
    if (file_content[ml - 1] == '\n') {
        ml--;
    }

    uint8_t* data_to_hash = (uint8_t*)malloc(ml);
    if (data_to_hash == NULL) {
        fprintf(stderr, "Memory allocation failed.\n");
        free(file_content);
        return 1;
    }
    memcpy(data_to_hash, file_content, ml);

    uint8_t r[32];
    printf("消息是：%s\nHash结果：\n",file_content);
    SM3Hash(data_to_hash, ml, r);
    dumpbuf(r, 32);

    // 释放内存  
    free(file_content);
    free(data_to_hash);

    return 0;
}
